


package Presentacion;

import Dominio.Carta;
import Dominio.Jugada;
import Dominio.JugadorRemigio;
import Dominio.Mazo;
import Dominio.Reglas;
import Dominio.IERemigio;
import Datos.GestorEstrategias;
import Dominio.PartidaRemigioOld;
import java.util.ArrayList;
import java.util.Scanner;

public class GUIRemigio_old {

  Scanner in;

  public GUIRemigio_old(Scanner in) throws Exception {
    this.in = in;
    Reglas r = new Reglas(false, 1, true, false, 0, 0, 0, 100, false);
    PartidaRemigioOld p = new PartidaRemigioOld(2, r, this);
    GestorEstrategias e = new GestorEstrategias();
    IERemigio ier = new IERemigio(e.estrategia("dificil.ie"));
    JugadorRemigio j0 = new JugadorRemigio(null, null);
    JugadorRemigio j1 = new JugadorRemigio(null, ier);
//    JugadorRemigio j2 = new JugadorRemigio(null, null);
    p.AddJugador(j0, 0);
    p.AddJugador(j1, 1);
//    p.AddJugador(j2, 2);
    p.Partida();
  }

  public void juegaie(Mazo mano, int jugador, Jugada jd) {
    
    pinfo(mano, jugador);
    if (jd.getAccion() == Jugada.CERRAR) {
      System.out.println("Cerrar    |" + jd.toString());
    }
    else {
      System.out.println("Descarte  |" + pc(mano.consultar_carta(jd.getPosicion())));
    }
        System.out.println("\n");
  }
  
  public void elegirie(Mazo mano, Carta descarte, int jugador, Jugada jd) {
    System.out.println("\nMaquina");
    pinfo(mano, jugador);
    if (jd.getAccion() == Jugada.BARAJA) {
      System.out.println("Baraja");
    }
    else {
      System.out.println("Descarte");
    }
  }

  public Jugada elegir(Mazo mano, Carta descarte, int jugador) {
    pinfo(mano, jugador, descarte);
    System.out.println("<elegir>  | 0 Baraja - 1 Descarte");
    System.out.print("[0|1]: ");
    return new Jugada(in.nextInt());
  }



  public Jugada juega(Mazo mano, int jugador) {
    pinfo(mano, jugador);
    System.out.println("<elegir>  | 0 Cerrar - 1 Descartar");
    System.out.print("[0|1]: ");
    int a = in.nextInt();
    if (a == 0) {
      return inparticion(mano);
    }
    else {
      System.out.println("<descartar>");
      System.out.print("[1..11]: ");
      return new Jugada(Jugada.DESCARTAR, in.nextInt());
    }
  }

  public Jugada particion(Mazo mano, int jugador) {
    pinfo(mano, jugador);
    return inparticion(mano);
  }

  private Jugada inparticion(Mazo mano) {
    System.out.print("numero particiones [0..5]: ");
    int n = in.nextInt();
    if (n < 0 || n > 5) {
      System.out.println("incorrecto");
      return new Jugada(Jugada.CERRAR, new ArrayList<int[]>(0));
    }
    ArrayList<int[]> p = new ArrayList<int[]>(n);
    for (int i = 0; i < n; ++i) {
      System.out.print("numero cartas grupo " + i + " [0..10]: ");
      int g = in.nextInt();
      if (g < 0 || g > 5) {
        System.out.println("incorrecto");
        return new Jugada(Jugada.CERRAR, new ArrayList<int[]>(0));
      }
      int[] f = new int[g];
      for (int j = 0; j < g; ++j) {
        System.out.print("entra posicion carta " + j + " [1..11]: ");
        f[j] = in.nextInt();
      }
      p.add(f);
    }
    return new Jugada(Jugada.CERRAR, p);
  }

  private void pinfo(Mazo mano, int jugador, Carta descarte) {
    pinfo(mano, jugador);
    System.out.println("Descarte  | " + pc(descarte));
  }
  private void pinfo(Mazo mano, int jugador) {
    System.out.println("Jugador   | " + jugador);
    System.out.println("Mano      |" + pm(mano));
  }

  private String pm(Mazo m) {
    String s = "";
    for (int i = 1; i <= m.vmazo.size(); ++i) {
      s += " " + pc(m.consultar_carta(i));
    }
    return s;
  }

  private String pc(Carta c) {
    return "「" + c.getPalo().substring(0, 4) + "：" + v2s(c.getValor()) + "」";
  }


  private String v2s(int i) {
    if (i == 0) {
      return "ø";
    }
    if (i == 11) {
      return "J";
    }
    if (i == 12) {
      return "Q";
    }
    if (i == 13) {
      return "K";
    }
    String s = "";
    s += i;
    return s;
  }


}
